<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

include('phpQuery-onefile.php');

class cep {

    function __construct() {
        
    }

    private function _simple_curl($url, $post = array(), $get = array()) {
        $url = explode('?', $url, 2);
        if (count($url) === 2) {
            $temp_get = array();
            parse_str($url[1], $temp_get);
            $get = array_merge($get, $temp_get);
        }
        $ch = curl_init($url[0] . "?" . http_build_query($get));
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        return curl_exec($ch);
    }

    private function get_correio_api($_cep) {
        $html = $this->_simple_curl('http://m.correios.com.br/movel/buscaCepConfirma.do', array(
            'cepEntrada' => $_cep,
            'tipoCep' => '',
            'cepTemp' => '',
            'metodo' => 'buscarCep'
                ));

        phpQuery::newDocumentHTML($html, $charset = 'utf-8');

        $dados =
                array(
                    'logradouro' => trim(pq('.caixacampobranco .resposta:contains("Logradouro: ") + .respostadestaque:eq(0)')->html()),
                    'bairro' => trim(pq('.caixacampobranco .resposta:contains("Bairro: ") + .respostadestaque:eq(0)')->html()),
                    'cidade/uf' => trim(pq('.caixacampobranco .resposta:contains("Localidade / UF: ") + .respostadestaque:eq(0)')->html()),
                    'cep' => trim(pq('.caixacampobranco .resposta:contains("CEP: ") + .respostadestaque:eq(0)')->html())
        );

        $dados['cidade/uf'] = explode('/', $dados['cidade/uf']);
        $dados['cidade'] = trim($dados['cidade/uf'][0]);
        $dados['uf'] = trim($dados['cidade/uf'][1]);
        unset($dados['cidade/uf']);

        return json_encode($dados);
    }

    private function _get_develman_cep($_cep) {
        $html = $this->_simple_curl('http://api.develman.com/correios/cep.dm?json&v=' . $_cep);
        $html = str_replace('estado', 'uf', $html);
        return $html;
    }

    private function _get_republica_virtual_cep($_cep) {
        $html = $this->_simple_curl('http://cep.republicavirtual.com.br/web_cep.php?cep=' . $_cep . '&formato=xml');
        $html = simplexml_load_string($html);
        return json_encode($html);
    }

    function get_cep($data) {
        $data['cidade'] = '';
        $data['cep'] = str_replace('-', '', $data['cep']);

        $avaliaCep = preg_match("/^[0-9]{8}$/", $data['cep']);

        if ($avaliaCep != true) {
            $data['erro'] = 'CEP Inválido';
            return json_encode($data);
        }
        if ($data['envio'] == 'correio') {
            return $this->get_correio_api($data['cep']);
        } else if ($data['envio'] == 'develman') {
            return $this->_get_develman_cep($data['cep']);
        } else if ($data['envio'] == 'republica_virtual') {
            return $this->_get_republica_virtual_cep($data['cep']);
        } else {
            $data['erro'] = 'Envio Inválido';
            return json_encode($data);
        }
    }

}
